from estadoFase import EstadoFase, db_session
from sqlalchemy import exc
from flask import flash
session = db_session()
from atributoTipo import AtributoTipo, atributotipo

class AtributoTipoManager(object):
    """Clase encargada del manejo de los tipos de atributos"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<AtributoTipo Manager>'
    
    def guardarAtributoTipo(self, atributoTipo):
        """
        Metodo encargado de almacenar un tipo de atributo en la base de datos
        @param atributoTipo: Objeto atributo tipo que se desea guardar.
        """
        session.add(atributoTipo)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El tipo de atributo ya existe", "error")
        else:
            return flash("Tipo de atributo registrado exitosamente")
#        session.close()
        
    def eliminarAtributoTipo(self, idatributotipo):
        """
        Metodo encargado de eliminar un tipo de atributo de la base de datos
        @param idatributotipo: id del atributo tipo que se desea eliminar.
        """
        atributoTipo = session.query(AtributoTipo).filter(AtributoTipo.idatributotipo == idatributotipo).first()
        session.delete(atributoTipo)
        session.commit()
        
    def getAtributoTipo(self, idatributotipo):
        """
        Metodo encargado de retornar tipo de atributo dado su idatributotipo
        @param idatributotipo: id del atributo tipo que se desea obtener.
        """
        atributoTipo = session.query(AtributoTipo).filter(AtributoTipo.idatributotipo == idatributotipo).first()
        return atributoTipo
    
    def getAtributosTipo(self):
        """Metodo encargado de retornar todos los tipos de atributos"""
        atributosTipo = session.query(AtributoTipo)
        return atributosTipo
    
    def getAtributosTipoFiltradoPorCampo(self, campo):
        """
        Metodo encargado de retornar un tipo de atributo dado su tipo de campo
        @param: nombre del atributo tipo que se desea obtener.
        """
        if campo == "":
            campo = "%"
        else:
            campo = "%" + campo + "%"
        atributoTipo = session.query(AtributoTipo).filter(AtributoTipo.campo.like(campo))
        return atributoTipo
    
    def getAtributoTipoPorCampo(self, campo):
        """
        Metodo encargado de retornar un tipo de atributo dado su tipo de campo
        @param campo: nombre del atributo tipo que se desea obtener.
        """
        atributoTipo = session.query(AtributoTipo).filter(AtributoTipo.campo == campo).first()
        return atributoTipo
    
    def getAtributoItemPorTipo(self, idtipoitem):
        """
        Metodo encargado de retornar el tipo de atributo dado el idtipoitem
        @param campo: id del tipo de item del atributo que se desea obtener.
        """
        atributoTipo = session.query(AtributoTipo).filter(AtributoTipo.idtipoitem == idtipoitem)
        return atributoTipo